perm filename MOVE.FAI[NEW,LCS]13 blob
sn#391982 filedate 1978-10-29 generic text, type T, neo UTF8
TITLE MOVE
ENTRY GETPTS,MOVIT,OUTLIM,COPYIT,UPDN,STFCH,DELETE,NOIR
ENTRY SLEND,POSIT,NOTAIL
EXTERNAL LOOP,RTLINE,DL,DPY,DPYNEW,.COMM.,XRN,KJY,PTR,POSI
EXTERNAL SCM,AMOD,RMOD,RINP,DPTR,LIMIT
K←15↔J←14↔ M←2↔ R2←5↔ X←6↔ L←4↔ R←7↔ A←11↔RY←3↔RZ←13↔JJ2←12
; SUBROUTINE GETPTS
; DIMENSION N(500),NP(500)
; COMMON/XRN/RN(4000) /KJY/ K,J
; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS,VY,JQ(17)
; 1/PTR/PWDS(250),ITEM,LL,I,IX
; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
; 1,(R6,RJQ(4)),(N,RN(2500)),(NP,RN(3000))
GETPTS: 0 ;CALL GETPTS(N)
SETZ J, ; J=0
SETZ K, ; K=0
MOVE JJ2,POSI+=8
MOVE R2,.COMM.
MOVE X,@(16)
SOS X
MOVEI M,PTR ; DO 1 M=1,ITEM
ADDI M,(X)
G1: AOJ X,
MOVE L,(M)
MOVEI R,XRN(L) ;L=PWDS(M)
MOVE 1,1(R) ;RN(L+2)
CAML R2,[=8.0] ;IF R2.GE.8 LOOK AT ALL STAVES
JRST GZ
CAME R2,1
JRST GX
GZ: MOVE A,.COMM.+7 ;RY=RN(L+1)
JUMPLE A,G9 ;F(R6.LE.0)GO TO 9
CAME A,(R)
JRST GX
; CHECK CODE NUM
G9: MOVE A,2(R) ;IF(R6.NE.RY)GO TO 1
CAMG A,.COMM.+6 ;9 IF(OUTLIM(R4,R5,RN(L+3)))GO TO 2
CAMGE A,.COMM.+5 ;R4
JRST G2
CAMLE JJ2,X
MOVE JJ2,X ;IF(M.LT.JJ2)JJ2=M
AOJ J,
; IN LIMITS?
MOVEI A,RINP+=499(J) ;J=J+1
MOVEI 0,(L)
AOJ K, ;K=K+1
MOVEI 1,RINP+=849(K)
MOVEM 0,(1)
ADDI 0,3 ;N(J)=L+3
MOVEM 0,RINP+=499(J)
; NP IS FOR USE IN JUSTIFY ROUTINE
G2: MOVE RY,(R) ;2 IF(RY.EQ.2)GO TO GRST
CAMN RY,[2.0] ;IF(RY.LT.4)GO TO 1
JRST GRST
CAML RY,[=4.0]
CAMLE RY,[=7.0]
JRST GX ;IF(RY.GT.7)GO TO 1
; TWO-ENDED ITEM?
MOVE RZ,-1(R) ;RZ=RN(L)
; WD CNT
KIFIX RY,RY
XCT TBL-4(RY) ; NEXT REPLACES THE ABOVE.
JRST G5
JRST GX
TBL: JRST G4
JRST G5
JRST G6
CAMG RZ,[4.0]
G4: CAMG RZ,[=3.0] ;7 IF(RZ.GT.3)GO TO 5
JRST GX
JRST G5 ;GO TO 1
GRST: MOVE RZ,-1(R) ;FOR 'CENTERED' RESTS
JRST G8
G6: CAMGE RZ,[=8.0] ;6 IF(RZ.LT.8)GO TO 8
JRST G8
SKIPL 6(R) ;IF(R7)GO TO 8
SKIPN =9(R) ;IF(R10.EQ.0)GO TO 8
JRST G8
;; MOVE A,7(R) ; IF(OUTLIM(R4,R5,RN(L+8)))GO TO 8
SKIPG A,7(R) ;IGNORE P8 IF IT IS 0 OR -
JRST G8
CAMG A,.COMM.+6
CAMGE A,.COMM.+5
JRST G8
CAMLE JJ2,X
MOVE JJ2,X
AOJ J,
; IN LIMITS?
MOVEI 0,=8(L) ;J=J+1
MOVEM 0,RINP+=499(J)
G8: CAML RZ,[=7.0] ;8 IF(RZ.LT.7)GO TO 5
SKIPG A,8(R) ; R9 IF(R9.LE.0)GO TO G5
JRST G5
CAME RY,[2.0] ;IF(RY.EQ.2)GO TO GRST2 (NEW REST CENTERING)
SKIPE 7(R) ; R8 USE R9 IF R9<0 AND (R8≠0 OR R7<0)
JRST GRST2
SKIPL 6(R) ; R7
JRST G5
GRST2: CAMG A,.COMM.+6
CAMGE A,.COMM.+5 ;R4
JRST G5
CAMLE JJ2,X
MOVE JJ2,X
AOJ J, ;J=J+1
; IN LIMITS?
MOVEI 0,=9(L)
MOVEM 0,RINP+=499(J)
G5: CAMN RY,[2.0] ;IF(RY.EQ.2)GO TO 1
JRST GX
MOVE A,5(R)
CAMG A,.COMM.+6
CAMGE A,.COMM.+5 ;R4
JRST GX
CAMLE JJ2,X
MOVE JJ2,X
AOJ J,
; IN LIMITS?
MOVEI 0,6(L) ;5 IF(OUTLIM(R4,R5,RN(L+6)))GO TO 1
MOVEM 0,RINP+=499(J)
GX: CAMGE X,LIMIT+1 ;1 CONTINUE
;;GX: CAMGE X,PTR+=250 ;1 CONTINUE
AOJA M,G1
MOVEM JJ2,POSI+=8
MOVEM J,KJY+1
MOVEM K,KJY
JRA 16,1(16)
; SUBROUTINE MOVIT(RN,NP,R4,R5,R8,R9)
; DIMENSION NP(1),RN(1)
; COMMON /KJY/ DONT,J
MOVIT: 0 ;RDIS=(R9-R8)/(R5-R4)
MOVE R,@5(16)
FSBR R,@4(16)
MOVE RY,@3(16)
FSBR RY,@2(16)
FDVR R,RY
; MOVEI L,XRN+=2499 ; DO 1 K=1,J
MOVE L,1(16) ; GET NP ARRAY LOC
SETZ K,
MOVE 0,@5(16) ; SET UP R9
;;M1: MOVE X,L ; L=NP(K)
M1: MOVEI R2,@(16) ;RA=RN(L)
ADD R2,(L)
MOVEI RZ,(R2)
MOVE R2,-1(R2)
CAML R2,@2(16) ;IF(OUTLIM(R4,R5,RA))GO TO 1
CAMLE R2,@3(16)
JRST MX
JUMPE 0,M2 ;IF(R9.NE.0)RA=(RA-R4)*RDIS
FSBR R2,@2(16)
FMPR R2,R
M2: FADR R2,@4(16) ; RN(L)=R8+RA
MOVEM R2,-1(RZ)
MX: AOJ K, ;1 CONTINUE
CAMGE K,KJY+1
AOJA L,M1
JRA 16,6(16)
OUTLIM: 0 ; FUNCTION OUTLIM(I,J)
SETO 0, ; OUTLIM=-1
MOVE 2,@(16) ; IF(RN(I+J).LT.R4)RETURN
ADD 2,@1(16)
MOVE 2,XRN-1(2)
CAMGE 2,.COMM.+5
JRA 16,2(16) ; IF(RN(I+J).GT.R5)RETURN
CAMG 2,.COMM.+6
SETZ 0, ; OUTLIM=0
JRA 16,2(16)
;***** COPYIT
;; TITLE COPYIT
; SUBROUTINE COPYIT
; COMMON/XRN/RN(4000) /KJY/ DONT,JY /POSI/S(8),JJ2,P
; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS,VY,JQ(17)
; 1/PTR/PWDS(250),ITEM,LL,I,IX
; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R7,RJQ(5))
; 1,(R6,RJQ(4)),(N,RN(2500))
STFCH: 0
SETO 13, ;FLAG FOR STFCH ROUTINE
JRST .+3
COPYIT: 0
SETZ 13, ;MAKE SURE IT'S 0
SETZ 7, ;IM=ITEM
MOVE 15,LIMIT+1 ; AC7 IS K-1
;; MOVE 15,PTR+=250 ; AC7 IS K-1
SOJ 15, ;(ITEM-1)
CP1: JSA 16,RTLINE ;DO 1 K=1,IM
JUMP PTR(7) ;L=PWDS(K)
JUMPL CPY ; IF(RTLINE(L))GO TO 1
JSA 16,OUTLIM ;IF(OUTLIM(L,3))GO TO 1
JUMP PTR(7)
JUMP [3]
JUMPL CPY
MOVE 11,PTR(7) ; NOW L IS AC11
MOVE 10,.COMM.+7 ;IF(R6.NE.0.AND.R6.NE.RN(L+1))GO TO 1
JUMPE 10,CP3
CAME 10,XRN(11)
JRST CPY
CP3: JUMPL 13,STF2 ; SKIP OVER FOR STFCH ROUTINE
KIFIX 12,XRN-1(11) ;M=RN(L)+2
ADDI 12,2
JSA 16,LOOP ;CALL LOOP(0,M,1,I,L,RN)
JUMP [0]
JUMP 12
JUMP [1]
;; JUMP PTR+=252
JUMP LIMIT+3
JUMP 11
JUMP XRN
AOS LIMIT+1 ;ITEM=ITEM+1
;; AOS PTR+=250 ;ITEM=ITEM+1
;; MOVE 13,PTR+=250
MOVE 13,LIMIT+1
MOVE 11,PTR-1(13) ;L=PWDS(ITEM)
STF2: MOVE 14,.COMM.+=8 ;RN(L+2)=R7
CAMG 14,[7.0] ;R7 > 7 = DON'T CHANGE STAFF NUM.
MOVEM 14,XRN+1(11)
JUMPGE 13,CP2
MOVE 0,7
AOJ
CAMGE POSI+=8
MOVEM POSI+=8 ; IF(K.LT.JJ2)JJ2=K
JRST CPY
CP2: CAMGE 13,POSI+=8 ;IF(ITEM.LT.JJ2)JJ2=ITEM
MOVEM 13,POSI+=8
AOJ 12, ;I=I+M+1
ADD 12,LIMIT+3
;; ADD 12,PTR+=252
;; MOVEM 12,PTR+=252
MOVEM 12,LIMIT+3
MOVEM 12,PTR(13) ;PWDS(ITEM+1)=I
CPY: CAMGE 7,15 ;1 CONTINUE
AOJA 7,CP1
JUMPL 13,.+3
MOVE 7,.COMM.+=8 ;R2=R7
MOVEM 7,.COMM. ;DOES THIS MATTER FOR STFCH}
JRA 16,(16) ;END
;SUBROUTINE STFCH
;INTEGER PWDS
;COMMON/XRN/RN(4000) /KJY/ DONT,JY /POSI/S(8),JJ2,P
;COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS,VY,JQ(17)
;1/PTR/PWDS(250),ITEM,LL,I,IX
;EQUIVALENCE (R7,RJQ(5)),(R6,RJQ(4))
;DO 1 K=1,ITEM
;L=PWDS(K)
;IF(RTLINE(L))GO TO 1
;IF(OUTLIM(L,3))GO TO 1
;IF(RN(L+1).NE.R6.AND.R6.NE.0)GO TO 1
;C DIDN'T MATCH THE CODE NUM.
;IF(JJ2)JJ2=K
;RN(L+2)=R7
;1 CONTINUE
;END
UPDN: 0 ;SUBROUTINE UPDN(NST)
;INTEGER PWDS
;COMMON/XRN/RN(4000) /KJY/ DONT,JY /POSI/S(8),JJ2,P
;COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS,VY,JQ(17)
;1/PTR/PWDS(250),ITEM,LL,I,IX
MOVE 7,@(16) ;EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
SOJ 7, ;1,(R6,RJQ(4))
MOVE 15,LIMIT+1 ; AC7 IS K-1
;; MOVE 15,PTR+=250 ; AC7 IS K-1
SOJ 15, ;(ITEM-1)
UPDN0: JSA 16,RTLINE ;DO 1 K=NST,ITEM
JUMP PTR(7) ;L=PWDS(K)
JUMPL UPDN1 ; IF(RTLINE(L))GO TO 1
MOVE 11,PTR(7) ;RY=RN(L+1) -- 11 IS L
MOVE 12,XRN(11) ;IF(RY.GT.16)GO TO 1
CAMG 12,[16.0] ; AC12=RY
CAME 12,[8.0] ;IF(RY.EQ.8)GO TO 1
CAMN 12,[3.0] ;IF(RY.EQ.3)GO TO 1
JRST UPDN1
CAMN 12,.COMM.+7 ;IF(RY.EQ.R6)GO TO 10
JRST UPDN10
SKIPE .COMM.+7 ;IF(R6.NE.0)GO TO 1
JRST UPDN1
UPDN10: CAME 12,[4.0] ; DIDN'T MATCH THE CODE NUM.
JRST UPDN11 ;10 ;IF(RY.NE.4)GO TO 11
MOVE 2,XRN-1(11) ;IF(RN(L).LT.3)GO TO 1
CAMGE 2,[3.0]
JRST UPDN1 ; A BAR LINE
UPDN11: JSA 16,OUTLIM ;11 IF(OUTLIM(L,3))GO TO 2
JUMP PTR(7)
JUMP [3]
JUMPL UPDN2
MOVE 2,.COMM.+=12 ;RN(L+4)=RN(L+4)+R11
FADRM 2,XRN+3(11)
;IF(JJ2)JJ2=K
MOVE 0,7
AOJ
CAMGE POSI+=8
MOVEM POSI+=8 ;IF(K.LT.JJ2)JJ2=K
UPDN2: CAML 12,[4.0] ;2 ;IF(RY.LT.4)GO TO 1
CAML 12,[7.0] ;IF(RY.GE.7)GO TO 1
JRST UPDN1 ; NO WIGGLE ON TRILL
CAME 12,[4.0] ;IF(RY.NE.4.)GO TO 12
JRST UPDN12
MOVE XRN+4(11) ;IF(RN(L+5).EQ.50.OR. - - .EQ.150)GO TO 1
CAME [50.0] ;AC0 IS RN(L+5)
CAMN [150.0]
JRST UPDN1 ; CRESC. OR BOX
UPDN12: JSA 16,OUTLIM ;12 ;IF(OUTLIM(L,6))GO TO 1
JUMP PTR(7)
JUMP [6]
JUMPL UPDN1
MOVE 3,.COMM.+=12 ;RN(L+5)=RN(L+5)+R11
FADRM 3,XRN+4(11)
;IF(JJ2)JJ2=K
MOVE 0,7
AOJ
CAMGE POSI+=8
MOVEM POSI+=8 ;IF(K.LT.JJ2)JJ2=K
UPDN1: CAMGE 7,15 ;1 ;CONTINUE
AOJA 7,UPDN0
JRA 16,1(16) ;END
;SUBROUTINE DELETE
;IMPLICIT INTEGER(A-Q,S-Z)
;COMMON/DL/X22,SAVER,NAME
;COMMON /XRN/RN(4000)
;COMMON R2,JA,CENTR,J2,RJQ(20),JQ(15),R6,DEL,X,JY,K
;COMMON/PTR/PWDS(250),ITEM,L,I,IX
;COMMON/DPY/ST(4000),WDS(250),MEDIT,IGO
DELETE: 0 ;EQUIVALENCE (ST2,ST(2))
MOVE 15,LIMIT+3
MOVEM 15,LIMIT+4
;; MOVE 15,PTR+=252
;; MOVEM 15,PTR+=253
MOVE 12,DPY+=4000 ;171 IX=I 15 IS IX
KIFIX 14,XRN-1(12) ;L=RN(MEDIT)+3.0
ADDI 14,3 ;AC14 IS L
; SIZE OF DELETION
SUB 15,14 ;I=IX-L
MOVEM 15,LIMIT+3
;; MOVEM 15,PTR+=252
JSA 16,LOOP ;CALL LOOP(MEDIT,I,1,0,L,RN)
JUMP DPY+=4000
JUMP LIMIT+3
;; JUMP PTR+=252
JUMP [1]
JUMP [0]
JUMP 14
JUMP XRN
MOVE 7,DL ;JY=WDS(X22+1)-WDS(X22)
MOVE 13,DPTR(7)
;; MOVE 13,DPY+=4000(7)
;; SUB 13,DPY+=3999(7) ;JY IS 13, X22 IS 7
SUB 13,DPTR-1(7) ;JY IS 13, X22 IS 7
MOVEI 10,2
ADD 10,DPTR-1(7) ;WDS(X22)+2
MOVE 15,LIMIT+1 ;15 IS ITEM (X)
JSA 16,LOOP ;CALL LOOP(WDS(X22)+2,WDS(X),1,0,JY,ST)
JUMP 10
JUMP DPTR-1(15)
;; JUMP DPY+=3999(15)
JUMP [1]
JUMP [0]
JUMP 13
JUMP DPY
MOVE 12,7 ;K=X22
DELE: MOVE 11,12 ;194 N=K+1
AOJ 11, ;N IS 11 K IS 12
MOVE 2,DPTR(11) ;WDS(N)=WDS(N+1)-JY
SUB 2,13
MOVEM 2,DPTR-1(11)
MOVE 2,PTR-1(11) ;PWDS(K)=PWDS(N)-L
SUB 2,14
MOVEM 2,PTR-1(12)
MOVE 12,11 ;K=N
CAMGE 12,15 ;IF(K.LT.X)GO TO 194
JRST DELE ; ABOVE RESHUFFLES POINTER ARRAYS. X=ITEM+1
SOS LIMIT+1 ;ITEM=ITEM-1
MOVE 2,LIMIT+1
CAMLE 7,LIMIT+1 ;IF(X22.GT.ITEM)X22=ITEM
MOVEM 2,DL
MOVEM 2,.COMM.+2 ;J2=ITEM
SOS LIMIT+1 ;ITEM=ITEM-1
MOVE 2,DPTR-1(2) ;ST2=WDS(J2)
MOVEM 2,DPY+1
JSA 16,DPYNEW ;271 CALL DPYNEW
JRA 16,(16)
NOIR: 0
JRA 16,1(16) ; DUMMY ******
SLEND: 0 ; SUBROUTINE SLEND
MOVE 8,[8.0] ;INTEGER PWDS
MOVE 7,SCM+=80 ;C TO FIND END POINTS OF STAVES
MOVE 4,[4.0];COMMON/XRN/RN(2000),IT,POS,RA,NN,JB,RB,A,B,JMP,JK,C,
; 1 DMAX,UMAX,AA,JMAX,X,Y,BB,RNX(1982)
; 1/SCM/V(78),I,LCNT,STAFF,LIST(200),REND/PTR/PWDS(250),ITEM,LL,IS,IX
SETZ 5, ;DO 1 K=1,ITEM
SLN1: MOVE 6,PTR(5) ;L=PWDS(K)
;IF(RN(L+1).NE.8)GO TO 1
CAMN 8,XRN(6) ;C FOUND A STAFF ;IF(RN(L+2).NE.STAFF)GO TO 1
CAME 7,XRN+1(6) ;C GOT THE RIGHT ONE
JRST SLN1X ;IF(IT)GO TO 2
SKIPGE RMOD+=10 ;POS=202
JRST SLN2 ;C NOW CHECK LEFT SIDE OF STAFF
MOVSI 15,210624 ;[202.0] ;IF(RN(L).LT.4)RETURN
CAML 4,XRN-1(6) ;P6 WASN'T MENTIONED - SO IT =200
JRST SLN3
;POS=RN(L+6)+2
MOVE 15,XRN+5(6) ;IF(POS.EQ.2)POS=202
FADR 15,[2.0] ;RETURN
CAMN 15,[2.0] ;2 POS=RN(L+3)-2.3
MOVSI 15,210624 ;[202.0] ;RETURN
JRST SLN3 ;1 CONTINUE
SLN2: MOVE 15,XRN+2(6) ;END
FSBR 15,[2.3]
SLN3: MOVEM 15,RMOD+=11
JRA 16,(16)
SLN1X: AOS 5
CAMGE 5,LIMIT+1
JRST SLN1
SKIPLE RMOD+=11 ;IF(POS.LE.0)RETURN
JRST SLN2-2 ;POS=202 (IN CASE THERE IS NO STAFF)
JRA 16,(16) ;END
POSIT: 0 ; FUNCTION POSIT(V)
MOVE 15,@(16) ; COMMON/XRN/RN(4000)
SKIPGE 15 ; DIMENSION POSNT(0/82)
MOVNS 15 ; EQUIVALENCE (POSNT,RN(3801))
; 1,(A,RN(3884)),(K,RN(3885))
KIFIX 14,15 ; IF(V)V=-V
; REREAD OR SOMETHING MAKES /1 C- 2/ GIVE A -2 FOR LAST NUM.!!!???
JSA 16,AMOD ; K=V
JUMP 15 ; A=POSNT(K)
JUMP [1.0] ;POSIT=A+(POSNT(K+1)-A)*AMOD(V,1.0)
; TYPE /2.3 -- FOR POSITION BETWEEN NTS 2 AND 3. ETC.
MOVE 2,RINP+=851(14) ; END
FSBR 2,RINP+=850(14)
FMPR 0,2
FADR 0,RINP+=850(14)
JRA 16,1(16)
NOTAIL: 0 ;FUNCTION NOTAIL(X)
SETZ ;NOTAIL=0
MOVM 2,@(16) ;X=ABS(X)
CAML 2,[0.56] ;IF(X.LT..56.OR.X.EQ..75)RETURN
CAMN 2,[0.75]
JRA 16,1(16)
CAME 2,[0.875] ;IF(X.EQ..875.OR.X.EQ..6)RETURN (8.. OR 10. )
CAMN 2,[0.6]
JRA 16,1(16)
SETO ;NOTAIL=-1
JRA 16,1(16)
END